package com.mate.cloud.order.handler;

import com.mate.cloud.order.domain.OrderDTO;
import com.mate.cloud.core.response.BaseResponse;

/**
 * 处理器抽象类
 * 定义doFilter方法，由子类实现处理器的内部逻辑，注意在doFilter方法的最后一步要记得调用doNextFilter()
 * 定义doNextFilter方法，由抽象类完成调用下一个处理器的代码。
 * @author: MI
 * @email: 448341911@qq.com
 * @createTime: 2025/1/27 14:47
 * @updateUser: MI
 * @updateTime: 2025/1/27 14:47
 * @updateRemark: 修改内容
 * @version: v1.0
 */
public abstract class AbstractOrderChainHandler {

    private AbstractOrderChainHandler nextHandler;

    /**
     * 执行过滤方法
     *
     * @param orderDTO
     * @return
     */
    abstract protected BaseResponse doFilter(OrderDTO orderDTO);

    /**
     * 执行下一个处理器
     *
     * @param orderDTO
     * @param resultDTO
     * @return
     */
    protected BaseResponse doNextHandler(OrderDTO orderDTO, BaseResponse baseResponse) {
        if (nextHandler == null) {
            return baseResponse;
        }
        return nextHandler.doFilter(orderDTO);
    }

    public void setNextHandler(AbstractOrderChainHandler nextHandler) {
        this.nextHandler = nextHandler;
    }


}
